定期ミートアップ 第5回 yhara
発表資料もここに書けばいいのではないか
BiwaScheme v0.7.4 is released · Discussion #253 · biwascheme/biwascheme
bugfix release
Object#class by yhara · Pull Request #299 · shiika-lang/shiika
p 123.class ができるようになった(出力:#<class Int>)
各オブジェクトがクラスオブジェクトへの参照を持つようになった
これでenumのパターンマッチが実装できるぞ〜
refactor: Wrap inkwell values by yhara · Pull Request #300 · shiika-lang/shiika
仮想関数の呼び出しなどでllvmのbitcast命令が必要
bitcastをミスった場合、llvmレベルではチェックできないので実行バイナリは生成されてしまう
inkwell valueにタグを付けるようにした
code:rust
pub struct SkObj<'run>(pub inkwell::values::BasicValueEnum<'run>);
; TODO: impl Deref SkObj -> BasicValueEnum
pub struct VTableRef<'run>(pub inkwell::values::BasicValueEnum<'run>);
pub struct I8Ptr<'run>(pub inkwell::values::PointerValue<'run>);
「Shiika objectを扱う関数」と「生のllvm値を扱う関数」をRustレベルで区別できるようになった
Metaclass
code:txt
^ ... superclass-subclass relationship
~ ... class-instance relationship
Object Object Object
^ ^ ^
Class ~ Metaclass ~ Metaclass
^
Object ~ Meta:Object ~ Metaclass
^ ^
| |
| |
123 ~ Int ~ Meta:Int ~ Metaclass
https://twitter.com/yhara/status/1417418628069171202
両方Classにしてしまうと、たとえばClass.constantsというAPIを追加したときにメタクラスにもconstantsが生えてしまう(例:Int.class.constants)